import inspect


from kinyx.ini_config_util import Config
config = Config('test.ini')

def test__get_str():
    print()
    print(f'running [{inspect.currentframe().f_code.co_name}] ...')

    print('------------------------------------------------------------------------------------------------')
    print('section        key        default           expect                 result')
    
    print()
    print('A              A          None              value_A_A             ', config.get_str('section_A', 'key_A', None))
    print('A              B          None              value_A_B             ', config.get_str('section_A', 'key_B', None))
    print('A              X          None              None                  ', config.get_str('section_A', 'key_X', None))
    
    print()
    print('A              A          +++               value_A_A             ', config.get_str('section_A', 'key_A', '+++'))
    print('A              B          +++               value_A_B             ', config.get_str('section_A', 'key_B', '+++'))
    print('A              X          +++               +++                   ', config.get_str('section_A', 'key_X', '+++'))
    
    print()
    print('X              A          None              None                  ', config.get_str('section_X', 'key_A', None))
    print('X              B          None              None                  ', config.get_str('section_X', 'key_B', None))
    print('X              X          None              None                  ', config.get_str('section_X', 'key_X', None))
    
    print()
    print('X              A          +++               +++                   ', config.get_str('section_X', 'key_A', '+++'))
    print('X              B          +++               +++                   ', config.get_str('section_X', 'key_B', '+++'))
    print('X              X          +++               +++                   ', config.get_str('section_X', 'key_X', '+++'))
    
    config.section('section_B')
    print()
    print('B              A          None              value_B_A             ', config.get_str(key='key_A', default=None))
    print('B              B          None              value_B_B             ', config.get_str(key='key_B', default=None))
    print('B              X          None              None                  ', config.get_str(key='key_X', default=None))
    
    print()
    print('B              A          +++               value_B_A             ', config.get_str(key='key_A', default='+++'))
    print('B              B          +++               value_B_B             ', config.get_str(key='key_B', default='+++'))
    print('B              X          +++               +++                   ', config.get_str(key='key_X', default='+++'))
    
    config.section('section_X')
    print()
    print('X              A          None              None                  ', config.get_str(key='key_A', default=None))
    print('X              B          None              None                  ', config.get_str(key='key_B', default=None))
    print('X              X          None              None                  ', config.get_str(key='key_X', default=None))
    
    print()
    print('X              A          +++               +++                   ', config.get_str(key='key_A', default='+++'))
    print('X              B          +++               +++                   ', config.get_str(key='key_B', default='+++'))
    print('X              X          +++               +++                   ', config.get_str(key='key_X', default='+++'))
    print('------------------------------------------------------------------------------------------------')

test__get_str()

def test__get_bool():
    print()
    print(f'running [{inspect.currentframe().f_code.co_name}] ...')

    print('------------------------------------------------------------------------------------------------')
    print('section        key           default           expect                  result')
    
    print()
    print('A              bool          None              True                   ', config.get_bool('section_A', 'bool', None))
    print('A              bool          +++               True                   ', config.get_bool('section_A', 'bool', '+++'))

    flag = False

    # 不支持的转换
    try:
        print(config.get_bool('section_A', 'notbool', None))
        flag = True
    except:
        pass
    if flag: raise ValueError()
    print()
    print('A              notbool       None              Error                   Error', )

    # 不支持的转换
    try:
        print(config.get_bool('section_A', 'notbool', '+++'))
        flag = True
    except:
        pass
    if flag: raise ValueError()
    print('A              notbool       +++               Error                   Error', )
    print('------------------------------------------------------------------------------------------------')

test__get_bool()